package sess

import (
	"errors"
	"io"
	"net"
	"src/zeus/common"
	"src/zeus/logger"
	"src/zeus/msgdef"
)

//////////////////////////////////////////////////////////////////////

func readARQMsgForward(conn net.Conn, buffdata []byte) (msgdef.IMsg, int, []byte, error) {
	// logger.Debug(logger.LogKey_Default, "msgHead 0：", len(buffdata))

	if conn == nil {
		return nil, 0, nil, errors.New("无效连接")
	}
	// msgHead := make([]byte, MsgHeadSize-msgIDSize)
	msgHead := buffdata[:MsgHeadSize-msgIDSize] // make([]byte, MsgHeadSize-msgIDSize)
	// msgHead[0] = 0
	// msgHead[1] = 0
	// msgHead[2] = 0
	// msgHead[3] = 0
	// logger.Debug(logger.LogKey_Default, "msgHead 1：", msgHead)
	if _, err := io.ReadFull(conn, msgHead); err != nil {
		return nil, 0, nil, err
	}
	// logger.Debug(logger.LogKey_Default, "msgHead 2：", msgHead)

	msgSize := (int(msgHead[0]) | int(msgHead[1])<<8 | int(msgHead[2])<<16)
	compressFlag := msgHead[3]
	if msgSize > maxTCPPacket || msgSize <= 0 {
		return nil, 0, nil, errors.New("收到的数据长度超过最大值")
	}
	// msgHead[0] = 0
	// msgHead[1] = 0
	// msgHead[2] = 0
	// msgHead[3] = 0
	// msgData := make([]byte, msgSize)
	msgData := buffdata[MsgHeadSize-msgIDSize : MsgHeadSize-msgIDSize+msgSize] //make([]byte, msgSize)

	if _, err := io.ReadFull(conn, msgData); err != nil {
		return nil, 0, nil, err
	}

	msgID := GetMsgID(msgData)
	if msgdef.GetMsgDef().IsMsgExist(msgID) {
		msg, err := DecodeMsg(compressFlag, msgData)
		if msg == nil {
			logger.Errorf("msgID %d len %d %s", msgID, len(msgData), common.MD5(msgData[2:]))
			// fmt.Println("msgID = ", msgID)
		}
		return msg, 0, nil, err
	}

	// msgBuf := make([]byte, MsgHeadSize-msgIDSize+msgSize)
	// copy(msgBuf, msgHead)
	// copy(msgBuf[MsgHeadSize-msgIDSize:], msgData)
	return nil, int(msgID), buffdata[:MsgHeadSize-msgIDSize+msgSize], nil

}
